# coding=utf-8

from pymongo import MongoClient
from bs4 import BeautifulSoup
import requests
import datetime
import pprint
import json
import time
import re

server_client = MongoClient('127.0.0.1', 27017)

server_db = server_client['knx_posts_db']
offical_posts_coll = server_db['offical_posts_coll']

# class POST():
#     def __init__(self):
#         self.company = '南京苏宁云商销售有限公司'
#         self.url = "http://campus.suning.cn/rps-web/position/showShixishengList.htm"
#         self.params = {
#             'model_name': ''
#         }
#         self.data = {
#             'pageNumber': 1,
#             'pageSize': 10,
#             'mailings': 0,
#             'id': 0,
#             'browses': 0,
#             'type': 5,
#             'typeName': 'SXS'
#         }
#
#         self.scrapy()
#
#     def scrapy(self):
#         for i in range(1, 3):
#             self.data['pageNum'] = i
#             r = requests.post(self.url, params = self.params, data = self.data)
#             soup = BeautifulSoup(r.text)
#             for a in soup.find('tbody').find_all('a'):
#                 if not a.has_key('href'):
#                     continue
#                 if 'poId' not in a['href']:
#                     continue
#                 url = 'http://campus.suning.cn' + a['href']
#                 r = requests.get(url)
#                 soup = BeautifulSoup(r.text)
#                 name = soup.find(class_ = 'section-title').get_text().strip()
#                 tr = soup.find('table').find_all('tr')
#                 location = tr[1].find('td').get_text().strip()
#                 count = ''
#                 edu = tr[0].find_all('td')[1].find('span').get_text().strip()
#                 date = ''
#                 p = soup.find(class_ = 'section-detail clearfix').find_all('p')
#                 description = '岗位职责：\n' + p[0].get_text() + '\n任职要求：\n' + p[1].get_text()
#                 item = {
#                     "url": url,  # jd详情页的地址
#                     'edu': edu,  # 最低学历
#                     'exp': [],  # 所需工作经验，比如[3, 5]表示3到5年, [3]表示3年，[]表示无经验要求
#                     'name': name,  # 职位名称 *
#                     'date': date,  # 职位发布日期，字符串形式即可，后期统一转换
#                     'lang': '',  # 对语言的要求
#                     'place': '',  # 办公具体地址
#                     'major': '',  # 专业要求
#                     'count': count,  # 招聘数量
#                     'salary': [],  # 薪资待遇，[5000, 8000]表示月薪5到8千，[4000]表示4千，[]表示没有写明
#                     'toSchool': True,  # 是否是面向校园招聘，本次官网抓取一律都是校园招聘，所以此处都是True
#                     'welfare': [],  # 福利待遇，比如五险一金、十三薪之类的，保存成数组
#                     'funType': '',  # 职能类型，比如证券经纪人是证券 / 期货 / 外汇经纪人
#                     'company': self.company,  # 企业名称
#                     'location': location,  # 所在城市
#                     'industry': 'IT互联科技行业',  # 企业所在行业
#                     'keywords': [],  # 此岗位的搜索关键字
#                     'platform': 'offical',  # 针对官网抓取时此处一律保存为offical
#                     'searchKeyword': '',  # 搜索的关键字，由于是官网抓取所以此处一律为空字符串
#                     'description': description,  # 职位的详细描述，包括职责、要求之类的
#                     'subIndustry': '',  # 一律为空字符串
#                     'stime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 抓取时间
#                 }
#                 print(item['company'], item['name'])
#
#                 if not offical_posts_coll.find_one({'name': item['name'], 'company': item['company'], 'location': item['location']}):
#                     offical_posts_coll.insert_one(item)
#
#
# POST()

pagesource = requests.get('http://campus.suning.cn/rps-web/ftl/campus/managePlan.htm?type=manage').text
soup = BeautifulSoup(pagesource, 'lxml')

for item in soup.select('.post-list li'):
    name = item.find(class_ = 'post-link').get_text().strip()
    s = BeautifulSoup(requests.get('http://campus.suning.cn/' + item.find(class_ = 'post-link').get('href')).text)
    location = s.find(text = re.compile('工作地点：')).parent.find_next_sibling().text
    description = s.select('.section-detail')[1].get_text().strip()
    description = description[:description.find('我要申请')].strip()
    company = '南京苏宁云商销售有限公司'

    item = {
        "url": '',  # jd详情页的地址
        'edu': '',  # 最低学历
        'exp': [],  # 所需工作经验，比如[3, 5]表示3到5年, [3]表示3年，[]表示无经验要求
        'name': name,  # 职位名称 *
        'date': '',  # 职位发布日期，字符串形式即可，后期统一转换
        'lang': '',  # 对语言的要求
        'place': '',  # 办公具体地址
        'major': '',  # 专业要求
        'count': -1,  # 招聘数量
        'salary': [],  # 薪资待遇，[5000, 8000]表示月薪5到8千，[4000]表示4千，[]表示没有写明
        'toSchool': True,  # 是否是面向校园招聘，本次官网抓取一律都是校园招聘，所以此处都是True
        'welfare': [],  # 福利待遇，比如五险一金、十三薪之类的，保存成数组
        'funType': '',  # 职能类型，比如证券经纪人是证券 / 期货 / 外汇经纪人
        'company': company,  # 企业名称
        'location': location,  # 所在城市
        'industry': 'IT互联科技行业',  # 企业所在行业
        'keywords': [],  # 此岗位的搜索关键字
        'platform': 'offical',  # 针对官网抓取时此处一律保存为offical
        'searchKeyword': '',  # 搜索的关键字，由于是官网抓取所以此处一律为空字符串
        'description': description,  # 职位的详细描述，包括职责、要求之类的
        'subIndustry': '',
        'stime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 抓取时间
    }

    if not offical_posts_coll.find_one({'company': company, 'name': name, 'location': location}):
        offical_posts_coll.insert_one(item)
        print(company, name)
